package com.sg.dto.integration.app;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * @desc TaskDataDto
 * @使用场景
 */
@Data
public class TaskDataDto extends BaseDto implements Serializable {

    /**
     * 任务ID
     */
    @ApiModelProperty("任务ID")
    private String taskId;

    /**
     * 冗余最新进度
     */
    @ApiModelProperty("冗余最新进度")
    private Double percentageProgress;

    /**
     * 任务名称
     */
    @ApiModelProperty("任务名称")
    private String taskName;

    /**
     * 总时长
     */
    @ApiModelProperty("总时长")
    private Long totalLength;

    /**
     * 前端状态时间
     */
    @ApiModelProperty("前端状态时间")
    private Long deflectionTime;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 内容表主键ID
     */
    @ApiModelProperty("内容表主键ID")
    private String entityId;

    /**
     * 父内容表主键ID
     */
    @ApiModelProperty("父内容表主键ID")
    private String parentEntityId;

    /**
     * 归属对象ID
     */
    @ApiModelProperty("归属对象ID")
    private String coordObjectId;

    /**
     * 内容冗余状态 EDITING:草稿 TOBESIGN:待签收 ONGOING:进行中 FAILED:已失败 OVERDUE:逾期任务 NOT_AT_THE:未开始 UNCOMPLETED:未完成 COMPLETED:已完成 UNREPORTED:待汇报 EVA:评价中 AUDIT:审核中 EXPIRED:已逾期 SUCCESS:已成功 ENDED:已结束 UNLIMITED:不限 TOBEFILL:待填报 TOBEEVA:待评价
     */
    @ApiModelProperty("内容冗余状态")
    private String stateCode;

    /**
     * 周期名称
     */
    @ApiModelProperty("周期名称")
    private String cycleStandardName;

    /**
     * 归属内容ID
     */
    @ApiModelProperty("归属内容ID")
    private String belongToContentId;

    /**
     * 虚拟组织下部门ID
     */
    @ApiModelProperty("虚拟组织下部门ID")
    private String deptId;

    /**
     * 负责人就职记录ID
     */
    @ApiModelProperty("负责人就职记录ID")
    private String personLiableInductionRecordId;

    /**
     * 主管就职记录ID
     */
    @ApiModelProperty("主管就职记录ID")
    private String directorInductionRecordId;

    /**
     * 部门简称
     */
    @ApiModelProperty("部门简称")
    private String deptShortName;

    /**
     * 负责人头像
     */
    @ApiModelProperty("负责人头像")
    private String personLiableUserFace;

    /**
     * 负责人姓名
     */
    @ApiModelProperty("负责人姓名")
    private String personLiableIdCardName;

    /**
     * 负责人昵称
     */
    @ApiModelProperty("负责人昵称")
    private String personLiableNickName;

    /**
     * 主管头像
     */
    @ApiModelProperty("主管头像")
    private String directorUserFace;

    /**
     * 主管姓名
     */
    @ApiModelProperty("主管姓名")
    private String directorIdCardName;

    /**
     * 主管昵称
     */
    @ApiModelProperty("主管昵称")
    private String directorNickName;

    /**
     * 任务编号
     */
    @ApiModelProperty("任务编号")
    private String taskNumber;

    /**
     * 任务类型 ROUTINE_TASK:常规任务 PROJECT_TASK:项目任务 TEMPORARY_TASK:临时任务 PROBLEM_TASK:问题任务
     */
    @ApiModelProperty("任务类型")
    private String taskType;

    /**
     * 创建人就职记录ID
     */
    @ApiModelProperty("创建人就职记录ID")
    private String createInductionId;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        TaskDataDto that = (TaskDataDto) o;
        return (
                taskId == that.taskId &&
                        percentageProgress == that.percentageProgress &&
                        taskName == that.taskName &&
                        totalLength == that.totalLength &&
                        deflectionTime == that.deflectionTime &&
                        createTime == that.createTime &&
                        entityId == that.entityId &&
                        parentEntityId == that.parentEntityId &&
                        coordObjectId == that.coordObjectId &&
                        stateCode == that.stateCode &&
                        cycleStandardName == that.cycleStandardName &&
                        belongToContentId == that.belongToContentId &&
                        deptId == that.deptId &&
                        personLiableInductionRecordId == that.personLiableInductionRecordId &&
                        directorInductionRecordId == that.directorInductionRecordId &&
                        deptShortName == that.deptShortName &&
                        personLiableUserFace == that.personLiableUserFace &&
                        personLiableIdCardName == that.personLiableIdCardName &&
                        personLiableNickName == that.personLiableNickName &&
                        directorUserFace == that.directorUserFace &&
                        directorIdCardName == that.directorIdCardName &&
                        directorNickName == that.directorNickName &&
                        taskNumber == that.taskNumber &&
                        taskType == that.taskType &&
                        createInductionId == that.createInductionId
        );
    }

    @Override
    public int hashCode() {
        return Objects.hash(
                super.hashCode(),
                taskId,
                percentageProgress,
                taskName,
                totalLength,
                deflectionTime,
                createTime,
                entityId,
                parentEntityId,
                coordObjectId,
                stateCode,
                cycleStandardName,
                belongToContentId,
                deptId,
                personLiableInductionRecordId,
                directorInductionRecordId,
                deptShortName,
                personLiableUserFace,
                personLiableIdCardName,
                personLiableNickName,
                directorUserFace,
                directorIdCardName,
                directorNickName,
                taskNumber,
                taskType,
                createInductionId
        );
    }

}
